/**
 *
 */
package com.angel.mocks.data.generator.rowProcessorCommand;

import com.angel.common.helpers.StringHelper;
import com.angel.data.generator.annotations.Inject;
import com.angel.io.annotations.ColumnRow;
import com.angel.io.annotations.RowChecker;
import com.angel.io.annotations.RowProcessor;
import com.angel.io.annotations.RowProcessorCommand;
import com.angel.io.exceptions.InvalidRowDataException;
import com.angel.mocks.data.generator.daos.MunicipalidadDAO;
import com.angel.mocks.data.generator.domainObject.Municipalidad;

/**
 * @author William
 *
 */
@RowProcessorCommand
	(
		columnsRow = {
			@ColumnRow( columnName = MunicipalidadAnnotationRowProcessorCommand.NOMBRE_COLUMN, aliases = {"Nombre de la Municipalidad"} ),
			@ColumnRow( columnName = MunicipalidadAnnotationRowProcessorCommand.NUMERO_COLUMN, aliases = {"Numero de Municipalidad"}, type = Integer.class)
		}
	)
public class MunicipalidadAnnotationRowProcessorCommand {

	public static final String NOMBRE_COLUMN = "nombre";
	public static final String NUMERO_COLUMN = "numero";

	@Inject
	private MunicipalidadDAO municipalidadDAO;

    @RowChecker(columnsParameters = {})
    public void checkRowData(String nombre, Integer numero) throws InvalidRowDataException {
		boolean areAllNotEmpty = StringHelper.areAllNotEmpty(nombre, numero.toString());
		if(!areAllNotEmpty){
			throw new InvalidRowDataException("Some row data are NULL - " +
					"nombre: [" + nombre+ "] - " +
					"numero: [" + numero + "].");
		}
		Municipalidad municipalidad = this.getMunicipalidadDAO().buscarUnicoOrNuloPorNombre(nombre);
		if(municipalidad != null){
			throw new InvalidRowDataException("Municipalidad exist with name [" + nombre + "].");
		}
    }

	@RowProcessor(columnsParameters = {}, object = Municipalidad.class, inject = true)
	public Municipalidad processRow(Municipalidad municipalidad, String nombre, Integer numero) {
        return municipalidad;
    }

	/**
	 * @return the municipalidadDAO
	 */
	public MunicipalidadDAO getMunicipalidadDAO() {
		return municipalidadDAO;
	}

	/**
	 * @param municipalidadDAO the municipalidadDAO to set
	 */
	public void setMunicipalidadDAO(MunicipalidadDAO municipalidadDAO) {
		this.municipalidadDAO = municipalidadDAO;
	}
}
